/**
 * ---- Classe Ck----
 *  * Première famille Ck : <BR>
 *      - Courbe initiale : C 1: Un segment défini par les coordonnées de ses deux extrémités.<BR>
 *      - Règle de transformation : On obtient C k+1 à partir de Ck en remplaçant chaque segment S de Ck 
 *                                  par les deux autres côtés du triangle rectangle isocèle dont S est la base, 
 *                                  et en conservant toujours la même orientation. <BR>
 * @author Alexandre Boursier, Nolan Potier <BR>
 * @version 20/12/2011
 *
 */

package exercice_1;

import java.awt.*;                    
import java.awt.event.WindowAdapter;  
import java.awt.event.WindowEvent;    

public abstract class Ck extends Frame {

    private static final long serialVersionUID = 6224208498314102195L;
    static final int WIDTH = 700;       
    static final int HEIGHT = 600;
    protected int profondeur;

    /**
     * Constructeur normal
     *
     * @param prof 
     *          le nombre d'itérations
     */
    public Ck (int prof) {
        this.setSize(WIDTH, HEIGHT);
        this.setVisible(true);
        this.setBackground (Color.white);
        this.profondeur=prof;
        addWindowListener(new WindowHandler());  
        setTitle("Exercice 1 - Famille Ck");
    } 
    
    private class WindowHandler extends WindowAdapter {
        public void windowClosing(WindowEvent e) {System.exit(0);}
    }

    public void paint(Graphics g)
    {
        int frameHeight = getSize().height; 
        int frameWidth = getSize().width;   
        int h = frameHeight-50 ;  
        int w = frameWidth -50;   
        g.setColor(Color.black);  
        drawCk(w/4, h/2, (3*w)/4, h/2, profondeur, g); 
    }

    /**
     * Méthode récursive pour dessiner les éléments de la classe Ck selon une profondeur k donnée <BR>
     * 
     * @param x1 
     *          Abscisse du premier point du segment cible
     * @param x2
     *          Abscisse du second point du segment cible
     * @param y1 
     *          Ordonnée du premier point du segment cible
     * @param y2 
     *          Ordonnée du second point du segment cible
     * @param k  
     *          Profondeur de la récursion
     * @param drawingArea 
     *          Outil nécessaire au dessin 
     * 
     */
    public abstract  void drawCk(int x1, int y1, int x2, int y2, int k , Graphics drawingArea) ;

}





